package com.zzj.ecology.system.service.system;

import com.zzj.ecology.system.bean.system.SysRole;
import com.zzj.ecology.system.dto.HttpResult;
import com.zzj.ecology.system.domain.Page;

import java.util.List;

public interface SysRoleService {

    /**
     * 根据用户主键查询用户的角色权限
     * @param userid
     * @return
     */
    List<SysRole> findRolesByUserId(Integer userid);

    /**
     * 分页查询 角色 数据
     * @param page
     * @return
     */
    public HttpResult findPageList(Page page);

    /**
     * 查询 穿梭框 数据
     * layui transfer 数据
     * @param userId
     * @return
     */
    HttpResult findTransferList(Integer userId);

    /**
     * 新角色创建, 创建角色基本信息,并赋予基本菜单功能
     * @param sysRole
     * @return
     */
    int createAndInitializeMenuAndBuildPermissionRelation(SysRole sysRole);

    /**
     * 查询 roleCode 角色别名是否已经存在。如果存在返回 true， 如果不存在返回 false
     * @param roleCode 角色别名
     * @return
     */
    boolean checkRoleCodeExist(String roleCode);

    /**
     * 删除角色操作, 标记删除 标记 delete_status = '1' 表示删除,并更新用户的修改时间及修改人字段
     * @param roleids
     * @param username
     * @return
     */
    HttpResult updateDeleteStatusByIds(List<Integer> roleids, String username);

    /**
     * 修改角色基本信息,如果角色名称(角色代码不可修改),备注信息,系统自动获取到当前登录人员作为 修改人员和记录修改时间
     * @param sysRole
     * @return
     */
    HttpResult update(SysRole sysRole);

    /**
     * 给当前角色 重新 分配相应的菜单
     * @param sysRole
     * @param menuIds
     * @return
     */
    HttpResult reBuildRoleMenuRelation(SysRole sysRole, List<Integer> menuIds);

    /**
     * 查询指定 角色 的所有菜单 ,根据 角色ID 查询
     * @param roleId
     * @return
     */
    HttpResult findMenusByRoleId(Integer roleId);


//
//    public HttpResult create(SysRole role);
//
//    public HttpResult deleteById(Integer id);
//
//    public HttpResult updateById(SysRole role);
//
//    HttpResult createAndGrant(SysRole sysRole, Integer[] permissionIds);
//
//    boolean isNotExistRoleName(String roleName);
//
//    boolean isNotExistRoleCode(String roleCode);
//
//    HttpResult updateAndPermissionGrant(SysRole sysRole, Integer[] permissionids);
//
//    HttpResult deleteAndGrant(Integer[] ids);
//
//    HttpResult updateAndMenuGrantByRoleId(Integer roleid, Integer[] menuIds);
//

//
//    HttpResult findTransferListByUserId(Integer userid);
}
